package com.kcht.itsed.mws.alefacade.stdfacade;

import com.kcht.itsed.mws.alefacade.exceptions.*;
import com.kcht.itsed.mws.alemodel.ACClientIdentity;
import com.kcht.itsed.mws.alemodel.ACPermission;
import com.kcht.itsed.mws.alemodel.ACRole;

import java.util.List;

public interface ALEAC extends ALEIntf{

	List<String> getPermissionNames()throws UnsupportedOperationException;
	
	void definePermission(String permName, ACPermission perm)throws DuplicatePermissionException, PermissionValidationException, UnsupportedOperationException;

	void updatePermission(String permName, ACPermission perm)throws NoSuchPermissionException, PermissionValidationException, UnsupportedOperationException;

	ACPermission getPermission(String permName)throws NoSuchPermissionException, UnsupportedOperationException;

	void undefinePermission(String permName)throws NoSuchPermissionException, UnsupportedOperationException;

	List<String> getRoleNames()throws UnsupportedOperationException;

	void defineRole(String roleName, ACRole role)throws DuplicateRoleException, RoleValidationException, UnsupportedOperationException;

	void updateRole(String roleName, ACRole role)throws NoSuchRoleException, RoleValidationException, UnsupportedOperationException;

	ACRole getRole(String roleName)throws UnsupportedOperationException, NoSuchRoleException;

	void undefineRole(String roleName)throws NoSuchRoleException, UnsupportedOperationException;

	List<String> addPermissions(String roleName, List<String> permissionNames)throws NoSuchRoleException, NoSuchPermissionException, UnsupportedOperationException;

	void setPermissions(String roleName, List<String> permissionNames)throws NoSuchRoleException, NoSuchPermissionException, UnsupportedOperationException;

	void removePermissions(String roleName, List<String> permissionNames)throws NoSuchRoleException, UnsupportedOperationException;

	List<String> getClientIdentityNames()throws UnsupportedOperationException;

	void defineClientIdentity(String identityName, ACClientIdentity id)throws DuplicateClientIdentityException, ClientIdentityValidationException, UnsupportedOperationException;

	void updateClientIdentity(String identityName, ACClientIdentity id)throws NoSuchClientIdentityException, ClientIdentityValidationException, UnsupportedOperationException;

	ACClientIdentity getClientIdentity(String identityName)throws NoSuchClientIdentityException, UnsupportedOperationException;

	List<String> getClientPermissionNames(String identityName)throws NoSuchClientIdentityException, UnsupportedOperationException;

	void undefineClientIdentity(String identityName)throws NoSuchClientIdentityException, UnsupportedOperationException;

	void addRoles(String identityName, List<String> roleNames)throws NoSuchClientIdentityException, NoSuchRoleException, UnsupportedOperationException;

	void removeRoles(String identityName, List<String> roleNames)throws NoSuchClientIdentityException, UnsupportedOperationException;

	void setRoles(String identityName, List<String> roleNames)throws NoSuchClientIdentityException, NoSuchRoleException, UnsupportedOperationException;
	
	List<String> getSupportedOperations();
}
